package com.nomito.minimito.controller.front;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.nomito.minimito.common.utils.PageUtils;
import com.nomito.minimito.common.utils.R;
import com.nomito.minimito.entity.ImGroupfriendEntity;
import com.nomito.minimito.service.ImGroupService;
import com.nomito.minimito.service.ImGroupfriendService;
import com.nomito.minimito.service.SqActivityService;
import com.nomito.minimito.vo.ActivityVo;
import com.nomito.minimito.vo.ActivitySearchParamVo;
import com.nomito.minimito.vo.CreateActivityVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

/**
 * @author 凌月青缃
 * @date 2021/5/16
 */
@Api(tags = "活动接口")
@RestController
@CrossOrigin
@RequestMapping("/front/activity")
public class FActivityController {
    @Autowired
    SqActivityService activityService;
    @Autowired
    private ImGroupfriendService groupfriendService;
    @Autowired
    private ImGroupService groupService;
    /**
     * 创建活动的接口，创建活动的时候顺带也把群聊也创建完成了，被迫我来写一下这个，也算当个代码示例
     * 前端传入建立活动的必要信息，
     *
     */
    @ApiOperation(value = "创建活动的接口，顺带创建完群聊")
    @PostMapping("/createActivity")
    public R createActivityAndGroup(@RequestBody CreateActivityVo vo){
        boolean b = activityService.createActivityAndGroup(vo);
        if (StringUtils.isEmpty(b)){
            return R.ok("活动、群聊创建成功");
        }else return R.error("活动、创建失败");
    }
    /**
     * 活动筛选（聚合筛选）不传东西就是查询全部活动列表
     * 传的东西：
     * 1）排序：最新、最热、最早
     * 2）热门标签筛选、人数筛选、活动状态
     *           adornParams({
     *             'page': this.pageIndex当前页码
     *             'limit': this.pageSize该页数量
     *             'key': this.dataForm.key搜索表单里的值
     *           })
     */
    @ApiOperation(value = "活动筛选（聚合筛选）不传东西就是查询全部活动列表,默认按时间排序")
    @PostMapping("/complexQueryActivities/")
    public R complexQueryActivities(@RequestParam(required = false) Map<String, Object> params,
                                    @RequestBody(required = false) ActivitySearchParamVo vo){

        PageUtils page = activityService.complexQueryActivities(params,vo);
        return R.ok().put("data", page);

    }

    /**
     * 加入活动（加入活动其实就是加入群聊）
     * TODO 加入后需要扣减相应的人数
     */
    @ApiOperation(value = "加入活动（加入活动其实同时也完成加入群聊）")
    @PostMapping("/joinInActivity")
    public R joinInActivity(Long activityId,Long UserId){
        //加入群成员关系表,活动id与群id之前是统一化处理的。
        boolean b = groupfriendService.joinGrops(activityId,UserId);
        if (b) return R.ok("加入成功");
        else return R.error();
    }

    /**
     * 完成、解散活动
     */
    @ApiOperation(value = "群主完成、解散活动")
    @PostMapping("/finishActivity")
    @Transactional
    public R FinishActivity(Long activityId){
        //1.需要先把活动逻辑删除.
        boolean b = activityService.removeById(activityId);
        //2.然后再把群聊逻辑删除
        boolean b1 = groupService.removeById(activityId);
        //3.删除所有的群成员
        boolean b2 = groupfriendService.remove(new QueryWrapper<ImGroupfriendEntity>().eq("group_id", activityId));
        if (b&&b1&&b2) return R.ok("活动已完成！");
        else return R.error("未知异常，请联系管理员~");
    }

    /**
     * 退出活动
     */
    @ApiOperation(value = "群成员退出活动、群聊")
    @PostMapping("/quitActivity")
    public R quitActivity(Long activityId,Long userId){
        boolean remove = groupfriendService.remove(new QueryWrapper<ImGroupfriendEntity>().eq("group_id", activityId).eq("user_id", userId));
        if (remove) return R.ok("退出成功~");
        else return R.error("出现未知异常，请联系管理员~");
    }


    /**
     * 活动详情
     */
    @ApiOperation(value = "活动详情接口")
    @GetMapping("/activityInfo")
    public R activityInfo(@RequestParam("activityId") Long activityId){
        ActivityVo activityVo = activityService.queryActivityInfo(activityId);
        return R.ok().put("activityInfo",activityVo);
    }




}
